perm filename XGP.FAI[SAB,LCS] blob sn#347650 filedate 1978-04-08 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE XGP
C00010 ENDMK
C⊗;
	TITLE XGP
	INTERNAL XGP 
	INTERNAL GETFI2,FASTI2
	INTERNAL PUTEXT,EXTOUT,GETEXT,EXTIN,FINEXT
	EXTERNAL EXIT
OUTF:	0
LX:	0
N:	BLOCK =512
XGP:	0		;SUBROUTINE PLOT(I,J,K)
	SETO  4,		;COMMON /OUTF/JJ
	CAMN	4,OUTF		;DIMENSION N(148)
	JRST	PL4		;IF(JJ.EQ.-1)GO TO 4
	MOVNM  4,LX		;L=1
	MOVEI	4,=127		;N(1)=127
	MOVEM	4,N
	MOVE	4,[ASCIZ/" "/]		;IF(JJ.EQ.' ')JJ='PLT'
	CAME	4,OUTF
	JRST	PLB			;WRITES FILE WITH .PLT EXTENSION.
	MOVE	4,[ASCIZ/"PLT"/]
	MOVEM	4,OUTF
PLB:	JSA	16,PUTEXT	;CALL PUTEXT(JJ,'PLT')
	JUMP 	[ASCIZ/PLT  /]
	JUMP 	[ASCIZ/PLT/]
	SETOM	OUTF		;JJ=-1
PL4:	MOVE	5,@2(16)	;4	IF(K.EQ.99)GO TO 1
	CAIN	5,=999
	JRST	PL1
	AOS	7,LX		;L=L+1
	CAIL	7,=129
	JRST	[	CAIL 7,=257
			JRST TOP
			CAIE 7,=129
			JRST NOWD
		  WWD:	MOVEI 4,=127
			MOVEM 4,N-1(7)		;N(L)=127
			AOS LX
			JRST NOWD
		  TOP:	CAIL 7,=385
			JRST TOP2
		  	CAIE 7,=257
			JRST NOWD
			JRST WWD
		  TOP2:	CAIN 7,=385
			JRST WWD
			JRST NOWD]
			
NOWD:	MOVEI	7,N
	ADD	7,LX		;CALL PAC(N(L),I)[SEE MSFAI.FAI]
	HRRZ	4,2(16)
	HRR	5,@4
	LSHC	5,-10
	HRRZ	4,1(16)
	HRR	5,@4
	LSHC	5,-16
	HRRZ	4,(16)
	HRR	5,@4
	LSHC	5,-16
	MOVEM	6,-1(7)
	MOVEM	6,LASTPK#	;SAVE LAST PACKED FOR END OF DATA
	MOVE	7,LX
	CAIGE	7,=512	;3	IF(L.LT.512)RETURN
	JRA	16,3(16)
	JSA	16,EXTOUT	;2	CALL EXTOUT(N,512)
	JUMP	N
	JUMP	[=512]
	MOVEI	7,1		;L=1
	MOVEM	7,LX
	JRA	16,3(16)	;RETURN
PL1:	MOVE 4,LX
	CAIN 4,[=512]		;IF EXACTLY 512, JUMP TO FASTOUT
	JRST PLEND
	IDIVI 4,=128		;JJJ=L/128
	IMULI 4,=128		;JJJJ=JJJ*128
	MOVE 7,4		;AC5 HAS REMAINDER
	MOVEM 5,N(7)		;FOUND LAST WDCNT.
	ADDI 4,=128		; END OF NEXT LOOP
	MOVE 6,LX
	SKIPN 5
	AOJ 6,		  ;IF ON WDCNT NUM.(AC5=0), ADD 1
	MOVE 7,LASTPK
;;COULD GET BAD DATA IF EXACT 128 WDS.	MOVE	7,N-1(5)	;J=N(L)
	AOJ 6,			; (L=L+1)
PL100:	MOVEM	7,N-1(6)	;DO 100 JJ=L,JXXX  (AC4)
				;100	N(JJ)=J
	CAMGE	6,4
	AOJA	6,PL100
PLEND:	JSA	16,EXTOUT	;CALL EXTOUT(N,512)
	JUMP	N
	JUMP	4
	JSA	16,FINEXT	;CALL FINEXT
	SETZM	OUTF		;JJ=0
	JSA	16,EXIT		;CALL EXIT

; WRITES AND READS DUMP MODE FILES WITH ANY EXTENSION.


	CH3←13
	CH←12
	CH2←11
	BLKS←←=1

DEFINE ERROR (MSG)
<	JSA 16,.ERROR
	JUMP [ASCIZ/MSG/
]
>


REGS:	BLOCK 20
DIR:	BLOCK 4

;CALL PUTEXT(<FILE>,<EXT>)
PUTEXT:	0	;USES EXTOUT,FINEXT, CH2
	MOVE 0,@0(16)
	MOVEM 0,FILNAM
	MOVE 0,@1(16)
	MOVEM 0,EXTNAM
	JSA 16,INTFIL
	SETZM DIR+2
	SETZM DIR+3
	ENTER CH2,DIR
	ERROR <ENTER FAILED>
	JRA 16,2(16)

;CALL EXTOUT(<ARRAY>,<NO. OF WORDS>)

EXTOUT:	0
	HRRZ 0,0(16)
	SUBI 0,1
	MOVEM 0,COM
	MOVN 0,@1(16)
	HRLM 0,COM
	OUTPUT CH2,COM
	STATZ CH2,740000
	ERROR <WRITE ERROR>
	JRA 16,2(16)


INTFIL:	0	;INITS DSK 
	MOVEI REGS
	BLT REGS+3
	INIT CH2,17
	SIXBIT/DSK/
	0
	ERROR <CAN'T INIT DSK!>
INTF4:	MOVE 0,FILNAM#
	MOVEM 0,FN#
	MOVE 1,[POINT 7,FN]
INTF3:	MOVE 2,[POINT 6,DIR]
	SETZM DIR
	MOVEI 3,5
INTF1:	ILDB 0,1
	CAIN 0," "
	JRST INTF2
	SUBI 0,40
	IDPB 0,2
	SOJG 3,INTF1
INTF2:	HRLZI REGS
	BLT 3
	MOVE 0,EXTNAM#
	MOVEM 0,EX#
	MOVE 1,[POINT 7,EX]
EXTF3:	MOVE 2,[POINT 6,DIR+1]
	SETZM DIR+1
	MOVEI 3,5
EXTF1:	ILDB 0,1
	CAIN 0," "
	JRST EXTF2
	SUBI 0,40
	IDPB 0,2
	SOJG 3,EXTF1
EXTF2:	HRLZI REGS
	BLT 3
	JRA 16,0(16)


COM:	OCT 0,0
BLKNUM:	0

;CALL FINEXT
FINEXT:	0
	CLOSE CH2,0
	STATZ CH2,740000
	ERROR <ERROR AFTER CLOSE>
	RELEASE CH2,0
	JRA 16,0(16)

;CALL GETEXT(<FILE>,<EXT>)

GETEXT:	0
	MOVE 0,@0(16)
	MOVEM 0,FILNAM
	MOVE 0,@1(16)
	MOVEM 0,EXTNAM
	JSA 16,INTFX
	SETZM DIR+3
	SETZM DIR+2
	LOOKUP CH,DIR
	ERROR <LOOKUP FAILED>
	JRA 16,2(16)


INTFX:	0	;INITS DSK FOR INPUT
	MOVEI REGS
	BLT REGS+3
	INIT CH,17
	SIXBIT/DSK/
	0
	ERROR <CAN'T INIT DSK!>
	JRST INTF4


;CALL FASTI2(<ARRAY>,<NO. WORDS>)

EXTIN:	0
	HRRZ 0,0(16)
	SUBI 0,1
	MOVEM 0,COM
	MOVN 0,@1(16)
	HRLM 0,COM
	INPUT CH,COM
	STATZ CH,740000
	0
	JRA 16,2(16)
.ERROR:	0
	OUTSTR [ASCIZ/?
/]				;MAKE SURE HE CAN SEE HIS ERROR
	OUTSTR @(16)		;OUTPUT ERROR MESSAGE
	CALLI 1,12		;LET USER CONTINUE
	JRA 16,1(16)
;CALL GETFI2(<FILE>,<0 OR -1>)  0=DAT,LCS  -1=WHERE YOU ARE.

GETFI2:	0
	MOVE 0,@0(16)
	MOVEM 0,FILNAM
	MOVE 0,@1(16)
	MOVEM 0,PPNW#
	JSA 16,INTFIZ
	MOVE 0,[SIXBIT/DMD/]
	MOVEM 0,DIR+1
	JSA 16,LKUP
	SKIPA
	JRST GETF3
	SETZM DIR+1
	JSA 16,LKUP
	SKIPA
GETF3:	JRA 16,2(16)
	MOVEI 1
	MOVEM @1(16)	;SEND BACK A 1 IN 2ND ARGUMENT IF FILE NOT FOUND.
	JRA 16,2(16)

LKUP:	0
	SETZM DIR+2
	SETZM DIR+3
	SKIPE PPNW	;0=DAT,LCS    NON-ZERO = WHERE EVER YOU ARE
	JRST LUP
	MOVE 0,[SIXBIT/DATLCS/]
	MOVEM 0,DIR+3
LUP:	LOOKUP CH3,DIR
	JRA 16,0(16)
	JRA 16,1(16)

INTFIZ:	0	;INITS DSK FOR INPUT
	MOVEI REGS
	BLT REGS+3
	INIT CH3,17
	SIXBIT/DSK/
	0
	ERROR <CAN'T INIT DSK!>
	JRST INTF4


;CALL FASTI2(<ARRAY>,<NO. WORDS>)

FASTI2:	0
	HRRZ 0,0(16)
	SUBI 0,1
	MOVEM 0,COM
	MOVN 0,@1(16)
	HRLM 0,COM
	INPUT CH3,COM
	STATZ CH3,740000
	0
	JRA 16,2(16)
	END